package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.ValorFlexibleVO;
import com.cs.beneficios.common.ConnectionFactory;
//import java.sql.BatchUpdateException;
import java.sql.Connection;
//import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
//import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
//import java.util.Vector;
//import java.sql.PreparedStatement;
//import java.util.Iterator;

import com.cs.beneficios.business.model.VflexVO;


public class VflexDAO
{

  /**
   * Conexion a la base de datos.
   */
  private Connection conn = null;
  private ConnectionFactory cf;

  /**
   * Constructor que inicializa la conexion con la base de datos.
   * @param conn Conexion con la base de datos.
   */
  public VflexDAO(ConnectionFactory cf)
  {
    this.cf = cf;
    try{
      this.conn = this.cf.getConnection();
    }catch(SQLException e){}
  }
  
  public Collection getVflex(Long codigoTipoVflex) throws SQLException
  {
    String query = "SELECT VFLEX.CODIGO CODE, VFLEX.CODIGO_VALOR CODIGO_VALOR, "+
                   "VFLEX.NOMBRE NOMBRE_VALOR, VFLEX.DESCRIPCION DESC_VALOR, "+
                   "TVFLEX.CODIGO CODE_TIPO_VFLEX, TVFLEX.NOMBRE NOMBRE_TIPO_VFLEX "+ 
                   "FROM paoyer.TCS_VALOR_FLEXIBLE VFLEX, paoyer.TCS_TIPO_VALOR_FLEX TVFLEX "+
                   "WHERE TVFLEX.CODIGO = VFLEX.TVF_CODIGO ";
    if(codigoTipoVflex != null)
    {
      query += "AND TVFLEX.NOMBRE LIKE '"+codigoTipoVflex+"'"+
      " order by vflex.descripcion ";;
      ResultSet rst = null;
      ArrayList vflex = new ArrayList();
      rst = cf.getRecordsRset(query,null,conn);
      VflexVO valorFlex = null;
      while ( rst.next() ) 
      {
          valorFlex = new VflexVO();
          valorFlex.setCode(new Long(rst.getLong( "CODE"))); 
          valorFlex.setCodigoVflex(rst.getString( "CODIGO_VALOR")); 
          valorFlex.setNombreTipoVflex(rst.getString( "NOMBRE_VALOR")); 
          valorFlex.setDescVflex(rst.getString("DESC_VALOR"));
          valorFlex.setCodigoTipoVflex(new Long(rst.getLong( "CODE_TIPO_VFLEX"))); 
          valorFlex.setNombreTipoVflex(rst.getString("NOMBRE_TIPO_VFLEX")); 
          vflex.add(valorFlex);
          valorFlex=null;
      }
      rst.close();
      
      return vflex;
    }else return null;
  }
  
  public Collection getVflex(String nombreTipoVflex) throws SQLException
  {
    String query = "SELECT VFLEX.CODIGO CODE, VFLEX.CODIGO_VALOR CODIGO_VALOR, "+
                   "VFLEX.NOMBRE NOMBRE_VALOR, VFLEX.DESCRIPCION DESC_VALOR, "+
                   "TVFLEX.CODIGO CODE_TIPO_VFLEX, TVFLEX.NOMBRE NOMBRE_TIPO_VFLEX "+ 
                   "FROM paoyer.TCS_VALOR_FLEXIBLE VFLEX, paoyer.TCS_TIPO_VALOR_FLEX TVFLEX "+
                   "WHERE TVFLEX.CODIGO = VFLEX.TVF_CODIGO ";
    if(nombreTipoVflex != null)
    {
      query += "AND TVFLEX.NOMBRE LIKE UPPER('"+nombreTipoVflex+"')"+
               " order by vflex.descripcion ";;
      
      //System.out.println(query);
      ResultSet rst = null;
      ArrayList vflex = new ArrayList();
      rst = cf.getRecordsRset(query,null,conn);
      VflexVO valorFlex = null;
      while ( rst.next() ) 
      {
          valorFlex = new VflexVO();
          valorFlex.setCode(new Long(rst.getLong( "CODE"))); 
          valorFlex.setCodigoVflex(rst.getString( "CODIGO_VALOR")); 
          //vflVO.setNombreVflex(rst.getString("codvalor")+"~"+rst.getString("descrip"));
          valorFlex.setNombreVflex(rst.getString("CODE")+"~"+rst.getString("DESC_VALOR")); 
          valorFlex.setDescVflex(rst.getString("DESC_VALOR"));
          valorFlex.setCodigoTipoVflex(new Long(rst.getLong( "CODE_TIPO_VFLEX"))); 
          valorFlex.setNombreTipoVflex(rst.getString("NOMBRE_TIPO_VFLEX")); 
          vflex.add(valorFlex);
          valorFlex=null;
      }
      rst.close();
      
      return vflex;
    }else return null;
  }
  
  public Collection FindCodeValorFlex(String strNombre) throws SQLException
  {
    String query = "SELECT NOMBRE, DESCRIPCION, CODIGO FROM paoyer.TCS_VALOR_FLEXIBLE ";
                   
    
    if(strNombre != null && !strNombre.equals(""))
    {
      query += "WHERE DESCRIPCION LIKE '"+strNombre.trim()+"'";
      ResultSet rst = null;
      ArrayList vflex = new ArrayList();
      rst = cf.getRecordsRset(query,null,conn);
      VflexVO valorFlex = null;
      while ( rst.next() ) 
      {
          valorFlex = new VflexVO();
          valorFlex.setCode(new Long(rst.getLong("CODIGO"))); 
          valorFlex.setNombreVflex(rst.getString("NOMBRE")); 
          valorFlex.setDescVflex(rst.getString("DESCRIPCION"));
          vflex.add(valorFlex);
          valorFlex=null;
      }
      rst.close();
      
      return vflex;
    }else return null;
  }
  
  public Collection getVflex(String nombreTipoVflex, int origen) throws SQLException
  {
    String query = "SELECT VFLEX.CODIGO CODE, VFLEX.CODIGO_VALOR CODIGO_VALOR, "+
                   "VFLEX.NOMBRE NOMBRE_VALOR, VFLEX.DESCRIPCION DESC_VALOR, "+
                   "TVFLEX.CODIGO CODE_TIPO_VFLEX, TVFLEX.NOMBRE NOMBRE_TIPO_VFLEX "+ 
                   "FROM paoyer.TCS_VALOR_FLEXIBLE VFLEX, paoyer.TCS_TIPO_VALOR_FLEX TVFLEX "+
                   "WHERE TVFLEX.CODIGO = VFLEX.TVF_CODIGO ";
    if(nombreTipoVflex != null)
    {
      query += "AND TVFLEX.NOMBRE = '"+nombreTipoVflex+"'"+
               " order by vflex.descripcion ";;
      ResultSet rst = null;
      ArrayList vflex = new ArrayList();
      rst = cf.getRecordsRset(query,null,conn);
      VflexVO valorFlex = null;
      while ( rst.next() ) 
      {
          valorFlex = new VflexVO();
          valorFlex.setCode(new Long(rst.getLong( "CODE"))); 
          valorFlex.setCodigoVflex(rst.getString( "CODIGO_VALOR")); 
          //vflVO.setNombreVflex(rst.getString("codvalor")+"~"+rst.getString("descrip"));
          valorFlex.setNombreVflex(rst.getString("NOMBRE_VALOR")); 
          valorFlex.setDescVflex(rst.getString("DESC_VALOR"));
          valorFlex.setCodigoTipoVflex(new Long(rst.getLong( "CODE_TIPO_VFLEX"))); 
          valorFlex.setNombreTipoVflex(rst.getString("NOMBRE_TIPO_VFLEX")); 
          vflex.add(valorFlex);
          valorFlex=null;
      }
      rst.close();
      
      return vflex;
    }else return null;
  }
    
  
  public String buscarPadre(String codeHijo) throws SQLException
  {
    String query = "select codigo from paoyer.tcs_valor_flexible "+
                   "where codigo = "+
                   "(select campo_n1 from paoyer.tcs_valor_flexible where codigo = "+codeHijo+")";
    //System.out.println(query);
    ResultSet rst = cf.getRecordsRset(query,null,conn);
    if(rst.next())
    {
      return rst.getString("codigo");
    }else return "";
  }
  
  public int SearchValorFlex(String strNombre) throws SQLException
  {
    int retornar = 0;
    String query = "SELECT DESCRIPCION FROM paoyer.TCS_VALOR_FLEXIBLE "+
                   "WHERE DESCRIPCION LIKE '"+strNombre.trim()+"'";
    ResultSet rst = cf.getRecordsRset(query,null,conn);
    if(rst.next())
    {
      retornar = 1;
    }
    return retornar;
  }
  
    public int SearchValorFlex(String strNombre, String strCodigo) throws SQLException
    {
      int retornar = 0;
      String query = "SELECT DESCRIPCION FROM paoyer.TCS_VALOR_FLEXIBLE "+
                     "WHERE UPPER(DESCRIPCION) LIKE '"+strNombre.trim().toUpperCase()+"' " +
                     "AND UPPER(CODIGO_VALOR) LIKE '"+strCodigo.trim().toUpperCase()+"' ";
      ResultSet rst = cf.getRecordsRset(query,null,conn);
      if(rst.next())
      {
        retornar = 1;
      }
      return retornar;
    }
  
    
  public Collection getVflex(String nombreTipoVflex, String codePadre) throws SQLException
  {
    String query = "SELECT VFLEX.CODIGO CODE, VFLEX.CODIGO_VALOR CODIGO_VALOR, "+
                   "VFLEX.NOMBRE NOMBRE_VALOR, VFLEX.DESCRIPCION DESC_VALOR, "+
                   "TVFLEX.CODIGO CODE_TIPO_VFLEX, TVFLEX.NOMBRE NOMBRE_TIPO_VFLEX "+ 
                   "FROM paoyer.TCS_VALOR_FLEXIBLE VFLEX, paoyer.TCS_TIPO_VALOR_FLEX TVFLEX, paoyer.TCS_VALOR_FLEXIBLE VFLEXPADRE "+
                   "WHERE TVFLEX.CODIGO = VFLEX.TVF_CODIGO "+
                   "AND VFLEX.CAMPO_N1 = VFLEXPADRE.CODIGO ";
    if(nombreTipoVflex != null && codePadre != null)
    {
    if(codePadre.equals("18343")){
     query += " AND VFLEX.CAMPO_N1 = "+codePadre+
               " order by vflex.descripcion ";
    
    }else{
    query += " AND TVFLEX.NOMBRE LIKE '"+nombreTipoVflex+"'"+
               " AND VFLEX.CAMPO_N1 = "+codePadre+
               " order by vflex.descripcion ";
    }
      
      ResultSet rst = null;
      ArrayList vflex = new ArrayList();
//      System.out.println(query);
      rst = cf.getRecordsRset(query,null,conn);
      VflexVO valorFlex = null;
      while ( rst.next() ) 
      {
          valorFlex = new VflexVO();
          valorFlex.setCode(new Long(rst.getLong( "CODE"))); 
          valorFlex.setCodigoVflex(rst.getString( "CODIGO_VALOR")); 
          valorFlex.setNombreVflex(rst.getString( "NOMBRE_VALOR")); 
          valorFlex.setDescVflex(rst.getString("DESC_VALOR"));
          valorFlex.setCodigoTipoVflex(new Long(rst.getLong( "CODE_TIPO_VFLEX"))); 
          valorFlex.setNombreTipoVflex(rst.getString("NOMBRE_TIPO_VFLEX")); 
          vflex.add(valorFlex);
          valorFlex=null;
      }
      rst.close();
      
      return vflex;
    }else return null;
  }
  
 public List getDominio(String tipovfl,String option)throws SQLException
 {
    int dominio=Integer.parseInt(tipovfl.trim());
    List listaDominio = new LinkedList();
  
    String strSQL = "SELECT TCS_VALOR_FLEXIBLE.CODIGO CODIGOVFL, TCS_TIPO_VALOR_FLEX.CODIGO TVFCOD, "+
                    "TCS_TIPO_VALOR_FLEX.DESCRIPCION TVFDES, TCS_TIPO_VALOR_FLEX.VIGENCIA TVFVIG, "+
                    "TCS_VALOR_FLEXIBLE.DESCRIPCION VFDES, TCS_VALOR_FLEXIBLE.TVF_CODIGO VFTVFCOD "+
                    "FROM paoyer.TCS_TIPO_VALOR_FLEX, paoyer.TCS_VALOR_FLEXIBLE "+
                    "WHERE TCS_TIPO_VALOR_FLEX.CODIGO="+dominio+" AND "+
                    "TCS_VALOR_FLEXIBLE.TVF_CODIGO="+dominio+" ";
    if(option.equals("1"))
    {
      strSQL += " AND TCS_VALOR_FLEXIBLE.VIGENCIA='S'";
    }else
    {
      strSQL += " AND TCS_VALOR_FLEXIBLE.VIGENCIA='N'";
    }
    strSQL += " ORDER BY CODIGOVFL";
    ResultSet rst = null;
    rst = cf.getRecordsRset(strSQL,null,conn);
    while(rst.next())
    {
        
        ValorFlexibleVO valorfl = new ValorFlexibleVO();
        
        valorfl.setCodigotvfl(rst.getString("TVFCOD"));
        valorfl.setCodvfltvfl(rst.getString("VFTVFCOD"));
        valorfl.setDescripciontvfl(rst.getString("TVFDES"));
        valorfl.setDescripcionvf(rst.getString("VFDES"));
        valorfl.setVigenciatvfl(rst.getString("TVFVIG"));
        valorfl.setCodigovfl(rst.getString("CODIGOVFL"));
        
        listaDominio.add(valorfl);
        valorfl = null;
    }
    
    return listaDominio;
    
 }

  public int ActValorFlex(String strCodVFL)throws SQLException {
     
     int iCodvfl=Integer.parseInt(strCodVFL.trim());
     
     
    String query = "UPDATE paoyer.TCS_VALOR_FLEXIBLE SET "+
                   "VIGENCIA = 'S' "+
                   "WHERE CODIGO="+iCodvfl+" ";
     int ActualizoCorrectamente = cf.execSql(query, null,conn);
     return ActualizoCorrectamente;
     
 }
  
  public Connection getConn()
  {
    return conn;
  }
}